package com.xiaoyu.common.core.currentUser;

import com.alibaba.ttl.TransmittableThreadLocal;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.http.HttpHeaders;

import java.io.Serializable;
import java.util.Collection;
import java.util.Map;

/**
 * @author zgb
 * @desc 执行任务的线程是被线程池管理，可以被复用（可以称为池化复用）。那复用了之后，如果还是依赖于父线程的 context，自然是有问题的，因为我们想要的效果是执行线程获取调用线程的 context，这时候就是TransmittableThreadLocal出场了。
 * 场景：就是父子线程或者不同线程需要共用一些变量。举个例子：之前在肥朝哥群里，肥大一直叼胃口，因为全链路日志是自研的嘛，没有sleuth等等框架的支持，所以像MDC这些全局变量，在多线程里头就失效了。
 * @date 2022-05-09 10:30:59
 */

@Data
@NoArgsConstructor
public class TransmittableThreadLocalRequestHeaders implements Serializable {
    private static final long serialVersionUID = -1242493306307174690L;
    private static final TransmittableThreadLocal<HttpHeaders> THREAD_LOCAL = new TransmittableThreadLocal<>();



    public static void set(HttpHeaders httpHeaders) {
        THREAD_LOCAL.set(httpHeaders);
    }

    public static HttpHeaders get() {
        return THREAD_LOCAL.get();
    }


    public static void remove() {
        THREAD_LOCAL.remove();
    }
}
